package com.inno.launcher.utils;

import java.security.MessageDigest;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class MD5Util {
    public static String getMD5(String val) {
        try {
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            md5.update(val.getBytes());
            byte[] m = md5.digest();//加密
            return HexUtil.encodeHex(m, false);
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
        }
        return null;
    }

    /**
     * 方法描述:签名字符串
     *
     * @param params    需要签名的参数
     * @param appSecret 签名密钥
     * @return
     * @author leon 2016年10月10日 下午2:54:47
     */
    public static String sign(HashMap<String, String> params, String appSecret) {
        StringBuilder valueSb = new StringBuilder();
        params.put("appSecret", appSecret);
        // 将参数以参数名的字典升序排序
        Map<String, String> sortParams = new TreeMap<String, String>(params);
        Set<Map.Entry<String, String>> entrys = sortParams.entrySet();
        // 遍历排序的字典,并拼接value1+value2......格式
        for (Map.Entry<String, String> entry : entrys) {
            valueSb.append(entry.getValue());
        }
        params.remove("appSecret");
        return getMD5(valueSb.toString());
    }

}
